/* 
    强制类型转换 === 构造函数转换 --- 隐式转换

    一下方法为javascript的内置方法，直接调用即可
    String()
    Number()
    Boolean()
    Object()
*/

/* 
    String（） 字符串转换 
        1、任何类型数值都会转换成十进制然后转换成字符串
        2、布尔类型直接将值转换成对应的字符串    "true" / "false"
        3、对象都会转换成 [object Object] : object : 类型  Object： 构造函数
        4、数组转换成元素值拼接',' ； 和Array.prototype.join(',')的效果相同： 但区分空数组和只有一个元素的情况
        5、undefined null  转换成字符串
 */

// var a = 2
// console.log(String(a))

// var b = 0xFF // 十六进制
// console.log(String(b)) // 255

// var c = 0o76 // 八进制
// console.log(String(c)) // 65

// var a = 4.315e+10 // 科学计数法
// console.log(String(a))

// var a = true 
// console.log(String(a) === 'true') // true

// var a = false
// console.log(String(a) === 'false') // true

// var a = {a:1, b:2}
// console.log(String(a) === '[object Object]') // true

// var a = [1,2,3]
// console.log(String(a) === '1,2,3') // true

// var a = []
// console.log(String(a) === '') // true

// var a = [1]
// console.log(String(a) === '1') // true

/* 
    Number() 数字类型转换
    NaN 数值类型，但是值不是数字，不能用于数字的计算
    1、字符串转换成数值时：如果字符串为纯数字、十六进制、八进制、科学计数法时都会转为十进制数字，空字符串转为0
    2、true转数值为1 ， false转为0
    3、undefined转为NaN ， null 转为 0
    4、所有的对象转换成数值时都是NaN
    5、数组转换成数值时先隐式转换成字符串，再转数值
*/
// var a = 'a'
// console.log(Number(a) === NaN) //false NaN不等于任何值

// var a = '12'
// console.log(Number(a) === 12) // true

// var a = '0xFF'
// console.log(Number(a) === 255) // true

// var a = '0o76'
// console.log(Number(a) === 62) // true

// var a = '4.38e+2'
// console.log(Number(a)) //438

// var a ={}
// console.log(Number(a)) // NaN

// var a = []
// console.log(Number(a) === 0) // true

var a = [[],[]]
console.log(String(a)) // ' , ' 俩空格拼接逗号
console.log(Number(a)) // NaN

var a = [[]] // 不管套基层都是一样
console.log(String(a) === '') // true
console.log(Number(a) === 0) //true

// var a = [1]
// console.log(Number(a) === 1) // true

// var a = [1,2,3]
// console.log(Number(a)) // NaN

/* 
    Boolean( ) 布尔类型转换
    false  undefined  null  NaN  0  ''  转为false
    出了以上六个其他都是true
*/

// var a = ''
// console.log(Boolean(a) === false) // true

// var a
// console.log(Boolean(a) === false) // true

// var a = null 
// console.log(Boolean(a) === false) // true

// var a = 0
// console.log(Boolean(a) === false) // true

// var a = []
// console.log(Boolean(a) === true) // true

// var a = {a:1}
// console.log(Boolean(a) === true) // true

/* 
    Object() 转换对象类型
        1、将会把所有的数字，字符串、布尔值转换成对应的对象类型
        2、undefined null 转换成空对象
        3、数组本身就是对象类型     
*/

// 数值型  存储在栈中 -- 映射数值对象类型，本来不可以使用的对象原型中的方法，映射后可以使用
// var a = 1

// 数值对象型 存在堆中 --- 是一个对象，可以使用对象原型中的方法（点语法）
// var b = new Number(2)
// console.log(b.toFixed(2)) // 2.00
// console.log(a.toFixed(2)) // 1.00

// console.log(Object(null)) // {}
// console.log(Object(undefined)) // {}


/* 
    转换方法
    ?.toString() 任何类型都有的方法，是对象原型上的方法，继承于Object ： 将对应类型转换成字符串
    数值在使用  .toString() 有参数，表示转换成多少进制的字符串 参数限制：2-36 ，最高36进制

    转字符串型
    .toString()
    .toFixed(保留小数位)
    .toExponential（小数点后保留几位) 转科学计数法字符串
    .toPrecision(n)  小数保留n位非零小数位， 大于0 采用科学计数法，保留n位数字

    转数值型
    parseInt(变量 ， 进制数) 转换成整型 ，进制数用来确认变量是几进制的，转换成十进制
    parseFloat(字符串) 转小数，没有进制，小数转进制有误差
*/

// var a = 30
// console.log(a.toString(2)) //将30转换成2进制，并以字符型式存储  11110
// console.log(a.toString(16)) // 转换成16进制字符串 1e

// var a = 345678
// console.log(a.toExponential(2)) // 3.46e+5
// console.log(a.toPrecision(2)) // 3.5e+5
// var a = 0.000236
// console.log(a.toPrecision(2)) // 0.00024  四舍五入保留法
// console.log(a.toLocaleString('de-DE'))

// 转数值
// var a = '34'
// console.log(parseInt(a , 11)) // 将11进制的34 转为十进制数

// var a = '11.1'
// console.log(parseFloat(a)) // 11.1




